home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / docs / mags / saku06.lha / txt / ohjelmointi.A < prev    next >
Text File  |  1992-09-02  |  8KB  |  177 lines

  1. 9
  2. 1
  3. *
  4. {2Amigan ohjelmoinnista · Tomi Jaskari 26.4.1994
  5. {6lähdeteos: "Programmer's Guide to the Amiga" · Robert A. Peck
  6. {6oikolukija: Kimmo Mustonen
  7.  
  8. {5Mitä Amiga-ohjelmoija tarvitsee
  9.  
  10. Taidot ja ohjelmistot, joita Amiga-ohjelmoinnissasi tulet tarvitsemaan,
  11. ovat paljolti riipuvaisia siitä, millaista sovellusohjelmaa olet
  12. kehittämässä. Saatat esimerkiksi olla laatimassa upeasti soivaa ja
  13. värikästä ohjelmaa, joka hyödyntää Amigassa valmiiksi olevia ääni- ja
  14. grafiikkaominaisuuksia, jolloin sinun tulee tietää, miten laadit
  15. tietorakenteet kuville ja ääninäytteille, sekä miten avaat tarvittavat
  16. kirjastot ja mitä kutsuja tarvitset mihinkin tarkoitukseen.
  17.  
  18. Tai haluat mahdollisesti käyttää moniajoa todella hyväksesi, ehkäpä
  19. tulostaen tiedoston kirjoittimelle samalla korjaillessasi toista tiedostoa
  20. ja siinä ohella vielä tausta-ajona ladata sähköpostia koneeseesi jostain
  21. maailmalta. Tähän tarvitset tietoa moniajosta tai vähimmäisvaatimuksena
  22. sinun tulee tietää, miten pyydät AmigaDossia aloittamaan uuden erillisen
  23. prosessin sinua varten.
  24.  
  25. Yleistäen sinun pitäisi tuntea komentotulkin eli CLIn toiminta ja
  26. moniajoytimen EXECin toiminta niiden systeemiohjelmistojen lisäksi, joita
  27. sovelluksesi ohjelmoiminen vaatii, koskapa jokainen sovellus vaatii pienen
  28. määrän kirjanpitotyötä ennen kuin voit käyttää grafiikkaa tai mitä tahansa
  29. muuta systeemifunktiota Amigan kirjastoista.
  30.  
  31. {5Funktiokirjastot
  32.  
  33. Kirjasto (library) on kokoelma funktioita, jotka liittyvät toisiinsa
  34. jollakin tavoin. Amigan suunnittelijat keräsivät toisiinsa liittyvät
  35. funktiot kirjastoihin varmistaakseen, että yhtä Kickstart-versiota varten
  36. kirjoitetut ohjelmat olisivat mahdollisimman yhteensopivia myös uudemmissa
  37. Amigoissa. Mahdollistaakseen tämän yhteensopivuuden suunnittelijoiden oli
  38. varmistettava, että ohjelman koodista pystyisi aina löytämään systeemin
  39. funktiot vaikka käyttöjärjestelmä olisi sitten muuttunut versiosta X
  40. versioon Y.
  41.  
  42. [ Tältä pohjalta on hyvä lähteä siirtämään Amigan käyttöjärjestelmää
  43. Kickstartteineen aivan uuteen tietokonearkkitehtuuriin. ]
  44.  
  45. Saavuttaakseen tämän yhteensopivuustavoitteen suunnittelijat määrittelivät
  46. tietorakenteen, joka muiden asioiden lisäksi sisältää taulukon
  47. hyppykäskyistä ja funktioiden osoitteista seuraavasti:
  48.  
  49. {5         HYPPY funktioon N
  50. {5         ... ...
  51. {5         HYPPY funktioon 3
  52. {5         HYPPY funktioon 2
  53. {5         HYPPY funktioon 1
  54. {5 LibBase <kirjaston alkuosoite muistissa>
  55. {5         <tietorakenteen loppuosa>
  56.  
  57. Kun kytket Amigaasi virran, eri systeemikirjastot etsitään
  58. Kickstart-muistista ja tehdään niiden osoitteista kutsutaulukko
  59. RAM-muistiin, jossa taulukkoa voidaan tarpeen vaatiessa myöhemmin muuttaa.
  60.  
  61. Systeemin käynnistyessä kirjastot voidaan sijoittaa vapaasti muistissa
  62. mihin tahansa osoitteeseen. Siksipä koodisi tulee määritellä tietty
  63. muuttujanimi - kirjaston perusosoitin (the library base address), jonka
  64. avulla voit sitten kutsua tietyn systeemikirjaston funktioita.
  65.  
  66.  
  67. {5Avauskoodiesimerkki
  68.  
  69. Pieni esimerkki siitä miten osoitetaan intuition-kirjastoa, missä
  70. IntuitionBase on perusosoitin Intuition-kirjastoon:
  71.  
  72. {5 #include "exec/types.h"
  73. {5 #include "intuition/intuition.h"
  74. {5 #include "intuition/intuitionbase.h"
  75.  
  76. {5 struct Intuitionbase *Intuitionbase;  /* must be global */
  77. {5 extern struct Library *OpenLibrary();
  78.  
  79. {5 main()
  80. {5 {
  81. {5 Intuitionbase = (struct IntuitionBase *)
  82. {5                 OpenLibrary("intuition.library",0);
  83. {5 if (IntuitionBase = = 0)
  84. {5 {
  85. {5   printf("Intuition won't open!\n");
  86. {5 }
  87. {5 /* more program material */
  88.  
  89.  
  90.  
  91. {5Linkkeri liittää ohjelmaasi koodia..
  92.  
  93. Kääntäessäsi ohjelman linkkeri yhdistää sen tiedostoon Amiga.lib, jossa on
  94. tarvittavat liitynnät funktiokirjastoihin ohjelmaasi varten. Kun kutsut
  95. kirjaston funktiota tapahtuu Amiga.libin toimesta seuraavaa:
  96.  
  97. · rekisterit talletaan, jotta funktion palatessa niiden arvot
  98.   voidaan palauttaa
  99. · ladataan rekisteriin sen kirjaston perusosoitin, jossa funktio sijaitsee
  100. · asettaa rekistereihin tarvittavat kutsuparametrit
  101. · hypätään perusosoittimen ja tietyn funktion paikan kertovan siirtymäarvon
  102.   eli offsetin avulla varsinaisen funktion koodiin
  103. · palauttaa rekistereihin niiden arvot ennen funktiokutsua
  104. · antaa tarvittaessa paluuarvon
  105.  
  106. Jos jostain syystä epäonnistut funktion kirjaston nimen julkistamisessa,
  107. linkkeri kertoo sinulle suunnilleen seuraavasti:
  108.  
  109. {5 _<someLibBase> undefined
  110.  
  111. Jos saat kirjaston perusosoittimen muuttujan julkistettua, mutta
  112. epäonnistut avaamiskutsussa ja silti yrität käyttää kyseisen kirjaston
  113. funktioita, ohjelmasi kaatuu.
  114.  
  115. Jos onnistut sekä määrittelemään kirjaston perusosoitteen, että avaamaan
  116. sen pitäisi kirjastofunktioiden osoittamisen sujua sen jälkeen hienosti.
  117. Amiga ROM Kernel Manuaalin A-liitteessä luetellaan perusosoittimien ja
  118. kirjastojen nimet, joihin ne yhdistetään. Jos unohdat niin Amiga-linkkeri
  119. kyllä kertoo mitkä kirjastot pitää julkaista ja avata.
  120.  
  121. Käynnistyskoodi, jonka olet liittänyt linkkerillä ohjelmaasi, avaa
  122. automaattisesti exec.libraryn ja dos.libraryn. Näin voit kutsua AmigaDOSin
  123. ja EXECin funktioita avaamatta niitä erikseen omassa ohjelmassasi.
  124.  
  125. {5C-ohjelmointi
  126.  
  127. Amigalle on useita C-kääntäjiä, joista paras kaupallinen on ehdottomasti
  128. SAS 6.50 C(++) ja paras shareware kääntäjä lienee Matt Dillonin DICE.
  129. Lisäksi on ainakin GNU-projektin C-kääntäjä, joka on yhteensopiva mutta
  130. hidas saamieni tietojen mukaan. Näistä ainakin kaksi ensin mainittua
  131. sisältävät täyden tuen Amigan määrittelytiedostoille eli niin sanotuille
  132. include-fileille. Lisäksi systeemin käyttämät tietorakenteet on helppo
  133. määritellä C-kielellä, ja suurin osuus Amigan käyttöjärjestelmästä on sitä
  134. paitsi käännetty C-lähdekoodista.
  135.  
  136. Kun käytät C:tä, Pascalia tai mitä tahansa muuta korkean tason
  137. ohjelmointikieltä, tulet yhdistämään korkean tason koodisi funktioihin,
  138. jotka mukauttavat käyttämäsi kielen parametrinvälitystavat Amigan
  139. systeemikoodiin käyttämään parametrinvälitystapaan.
  140.  
  141. {5Assembler-ohjelmointi
  142.  
  143. Jos käytät assemblykoodia kutsuaksesi systeemin funktioita, sinun tulisi
  144. ensin tuntea Amigan käyttötavat 68000 rekistereille; ensinnäkin rekisterit
  145. D0, D1, A0 ja A1 ovat aina vapaasti käytössä eli toisin sanoen mikä tahansa
  146. systeemifunktio saattaa muuttaa niiden arvoa palauttamatta alkuperäistä.
  147. Kaikkien muiden rekistereiden sisällöt systeemi tallettaa ja palauttaa
  148. pinon avulla. Eli paljon aliohjelmakutsuja käyttävä ohjelma tarvitsee ison
  149. pinon!
  150.  
  151. Funktiot, jotka palauttavat jonkin arvon, palauttavat sen rekisterissä D0.
  152. Jos funktiosi pitää palauttaa useampi arvo, tulee sinun suunnitella koodisi
  153. palauttamaan osoite tietorakenteeseen, joka sisältää taulukon tuloksista.
  154.  
  155.  
  156. {5SysBase ja Stack Pointer
  157.  
  158. Motoralan mikroprosessorisarjan MC680x0 osoiterekistereistä kaksi on
  159. Amigassa varattu erikoiskäyttöön:
  160.  
  161. A6-rekisteriä ei koskaan käytetä parametrien välittämiseen. A6 on nimetty
  162. SysBaseksi. Se sisältää osoitteen systeemifunktioden vektoritaulukkoon,
  163. joka puolestaan sisältää voimassa olevat osoitteet muihin funtioihin.
  164. Funktiota kutsuttaessa, keskusyksikkö siirtyy suorittamaan funktiota tästä
  165. vektoritaulukosta saamansa osoitteen kautta, joten ohjelmoija voi
  166. halutessaan muuttaa vektoritaulukon sisältämiä systeemifunktioiden
  167. osoitteita eri tarkoituksia varten. Esimerkiksi funktioiden toimintaa
  168. voidaan tehostaa tai lisätä analysointi- ja/tai profilointikoodia ohjelman
  169. suorituksen tarkempaa tutkimista varten. Tämä on vain Amigaa koskeva
  170. piirre.
  171.  
  172. Toinen erikoisesti kohdeltava rekisteri on A7; se on samalla SP eli Stack
  173. Pointer, jonka avulla osoitetaan pinoon talletettua dataa. Tämä koskee
  174. kaikkia MC680x0 sarjaan pohjautuvia tietokoneita.
  175.  
  176. {6 - TMJJ -- tänään mietin jumalattomia juonia -
  177.